import logging.config
import yaml
import os
import PublicFunction as pf

"""
使用字典配置信息和dictConfig()函数实现日志配置
DEBUG < INFO < WARNING < ERROR < CRITICAL
"""

yml = 'logging.yml'

'''
之前用的版本，在做哔哩程序时做了修改
with open(yml, 'r') as f_conf:
    dict_conf = yaml.safe_load(f_conf)
logging.config.dictConfig(dict_conf)
# logging.basicConfig(filename=logName) # 经测试这一句没有用，在这里没有取logging.yml里的日志文件名logging.log, 而是在这里指定（但指的名仍然是logging.log,如果用户在配置文件里修改了这个名，但仍取这个名：logging.log)
logger = logging.getLogger('log')  # log 为logging.yml中的 log,如果配置文件中没有，则会取root用户的配置
'''
try:
    # 该程序在容器内执行，在外部调用，存在的问题是调试环境和应用环境不同的问题，这里做个判断，如果是调试程序则取源码文件夹下的配置文件
    path_yml = os.path.join(pf.get_basic_path() + '/' + pf.get_config_dir(), yml)  # 正式运行环境
    if not os.path.exists(path_yml):
        path_yml = os.path.join(pf.get_config_dir(), yml)  # 调试环境
        print(
            "没有在容器内的映射目录({0})里找到日志配置文件,可能原因是配置文件没有拷贝到宿主机的挂载目录或者当前应用没有部署在容器内，将在当前文件夹{1}下查找日志配置文件。".format(pf.get_basic_path(),
                                                                                                   pf.get_current_directory()))
    if not os.path.exists(path_yml):
        raise RuntimeError("配置文件丢失({0})！".format(yml))
    path_yml = os.path.abspath(path_yml)
    with open(path_yml, 'r') as f_conf:
        dict_conf = yaml.safe_load(f_conf)
    logging.config.dictConfig(dict_conf)
    logger = logging.getLogger('log')  # log 为logging.yml中的 log,如果配置文件中没有，则会取root用户的配置
except Exception as e:
    print(e)

# 测试
# logger.debug('debug message')
# logger.info('info message')
# logger.warning('warn message')
# logger.error('error message')
# logger.critical('critical message')
